วิธีการเชื่อมต่อจาก EC2 ไปยัง EC2 อื่นด้วย SSH
ครั้งนี้ผมจะมาแนะนำ วิธีการเชื่อมต่อจาก EC2 ไปยัง EC2 อื่นด้วย SSH
จุดประสงค์การทำ
ผมจะทำการเชื่อมต่อ EC2 Instance (b) จาก EC2 Instance (a) ด้วย SSH ครับ
1. สร้าง EC2 Instance (a)
ให้ทำการติดตั้ง EC2 Instance (Amazon Linux 2) โดยดูตามลิงก์ด้านล่างนี้เป็นตัวอย่างได้เลย (สำหรับคนที่มีอยู่แล้วข้ามขั้นตอนนี้ไปได้เลยครับ)
หมายเหตุ: ไม่ต้องทำหัวข้อย่อยของ ❌ การ Connect to EC2 by PuTTY เพราะว่าเราจะใช้ VSCode เชื่อมต่อกับ Server EC2 Instance ครับ
ส่วนที่ต้องระวังคือ ตอนสร้าง Key Pair เพราะมีส่วนของ Private key file format ที่ตั้งค่าไม่เหมือนกัน ซึ่งในบทความตัวอย่างจะเป็น [ Private key file format: ◉ .ppk ] แต่ในบทความนี้เราจะใช้เป็น [ Private key file format: ◉ .pem ] ครับ
ตัวอย่างตั้งค่าการสร้าง EC2 Instance (a) ในบทความนี้
※Create Key pairs
Key pair
Key pairs:
tinnakorn-test-a
Key pair type:RSA
Private key file format: ◉.pem
(หากต้องการเชื่อมต่อกับ PuTTY ให้เลือกเป็น [.ppk])
※Launch instances
Name and tags
Name:
tinnakorn-test-a
Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
(Default)Instance type
Instance type:
t3a.nano
Key pair (login)
Key pair name - required:
tinnakorn-test-a
Network settings
Firewall (security groups)
Security group name - required:
tinnakorn-test-a
Description - required:tinnakorn-test-a
Inbound security groups rules
Security group rule 1 (TCP, 22, 0.0.0.0/0)
Type:
ssh ▼
| Source type:My IP ▼
| Source:xxx.xxx.x.xxx/32 ✕
Configure storage
1x:
8
GiBgp2 ▼
Root volume (Default)
2. สร้าง EC2 Instance (b)
ตัวอย่างตั้งค่าการสร้าง EC2 Instance (b) ในบทความนี้
※Create Key pairs
Key pair
Key pairs:
tinnakorn-test-b
Key pair type:RSA
Private key file format: ◉.pem
(หากต้องการเชื่อมต่อกับ PuTTY ให้เลือกเป็น [.ppk])
※Launch instances
Name and tags
Name:
tinnakorn-test-b
Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
(Default)Instance type
Instance type:
t3a.nano
Key pair (login)
Key pair name - required:
tinnakorn-test-b
Network settings
Firewall (security groups)
Security group name - required:
tinnakorn-test-b
Description - required:tinnakorn-test-b
Inbound security groups rules
Security group rule 1 (TCP, 22, 0.0.0.0/0)
Remove
Configure storage
1x:
8
GiBgp2 ▼
Root volume (Default)
3. เชื่อมต่อ SSH ไปยัง EC2 Instance (a)
ตอนนี้ผมก็มี EC2 Instance ทั้ง 2 ตัวดังนี้:
・tinnakorn-test-a
・tinnakorn-test-b
เพื่อให้เข้าใจง่ายขึ้นผมจะเรียก EC2 Instance ตามชื่อเลยครับ
ต่อไปให้ทำการเชื่อมต่อไปยัง tinnakorn-test-a
ให้ดูตัวอย่างการเชื่อมต่อ EC2 Instance ด้วย VSCode ที่ลิงก์บทความด้านล่างนี้
4. อัปโหลดไฟล์ Key Pair (b) ไปยัง EC2 Instance (a)
ขั้นตอนนี้ผมจะอัปโหลดไฟล์ key pair:tinnakorn-test-b.pem
ไปยัง tinnakorn-test-a และตรวจสอบไฟล์ด้วยคำสั่งll
ครับ
หน้าจอด้านล่างคือหน้าจอที่ใช้ VSCode ซึ่งการอัปโหลดไฟล์ไปยัง Server EC2 Instance เราสามารถใช้ซอฟต์แวร์อื่นๆ ได้ เช่น WinSCP เป็นต้น
รันคำสั่งนี้เพื่อย้ายไฟล์ tinnakorn-test-b.pem ไปยังโฟลเดอร์ .ssh ของ tinnakorn-test-a
mv tinnakorn-test-b.pem .ssh
รันคำสั่งนี้เพื่อทำให้สามารถเข้าถึง tinnakorn-test-b ได้เฉพาะตัวผู้ใช้งานเท่านั้น (ขั้นตอนนี้สำคัญนะครับ)
chmod 600 .ssh/tinnakorn-test-b.pem
5. การเชื่อมต่อจาก EC2 Instance (a) ไปยัง EC2 Instance (b)
การเชื่อมต่อจาก EC2 Instance (a) ไปยัง EC2 Instance (b) สามารถเชื่อมต่อได้ 2 วิธีดังนี้
5.1 การเชื่อมต่อด้วย Private IPv4 address
ดู VPC ที่ tinnakorn-test-b อยู่ใน Network เดียวกันกับ tinnakorn-test-a ดังนี้
» เข้ามาที่ EC2 Instance:tinnakorn-test-b
» คลิกที่VPC ID
เมื่อเข้ามาหน้า Your VPCs แล้วให้ Copy IPv4 CIDR (172.31.0.0/16
)
กลับมาที่หน้า EC2 Instance (tinnakorn-test-b) แล้วเลือกหัวข้อSecurity
และคลิกที่Security groups
เลือกหัวข้อInbound rules
และคลิกที่Edit inbound rules
เพิ่ม Inbound rules ดังนี้
① คลิกAdd rule
② Type:SSH
③ Source:172.31.0.0/16
(IPv4 CIDR ของ VPC)
④ คลิกSave rules
กลับมาที่หน้า EC2 Instance (tinnakorn-test-b) อีกครั้ง และ Copy Private IPv4 addresses
รันคำสั่งด้านล่างนี้ใน terminal ของ tinnakorn-test-a ตามด้วยพิมพ์yes
ก็จะสามารถเชื่อมต่อเข้าไปยัง tinnakorn-test-b จาก tinnakorn-test-a ได้ครับ (ใช้ Private IPv4 addresses ของ tinnakorn-test-b ในการเชื่อมต่อ)
ssh -i .ssh/tinnakorn-test-b.pem [Private IPv4 addresses ของ tinnakorn-test-b]
ในกรณีที่ VPC เหมือนกัน เราขอแนะนำให้ใช้ Private IP ในการเชื่อมต่อ นั่นเป็นเพราะว่าการใช้ Private IP จะทำให้การเชื่อมต่อตอบสนองเร็วกว่า และในกรณีที่อยู่ใน VPC ที่ต่างกัน จะไม่สามารถเชื่อมต่อด้วย Private IP ได้ ดังนั้นให้ทำการเชื่อมต่อด้วย Public IP ตามที่อธิบายไว้ในขั้นตอนถัดไปครับ
5.2 การเชื่อมต่อด้วย Public IPv4 address
มาที่หน้า EC2 Instance (tinnakorn-test-a) และ Copy Public IP
เข้าไปยัง Inbound rules ของ tinnakorn-test-b เหมือนขั้นตอนที่แล้ว จากนั้นเพิ่ม Rule ดังนี้
① คลิกAdd rule
② Type:SSH
③ Source:54.xxx.xxx.xxx
(Public IPv4 address ของ tinnakorn-test-a)
ในส่วนของ Source นี้เราสามารถตั้งค่า Anywhere-IPv4 เพื่ออนุญาตการเชื่อมต่อทั้งหมดได้ (แต่ไม่แนะนำเนื่องจากว่าจะทำให้เว็บไซต์ถูกโจมตีได้ง่ายครับ)
④ คลิกSave rules
กลับมาที่หน้า EC2 Instance (tinnakorn-test-b) อีกครั้ง และ Copy Public IPv4 address
รันคำสั่งด้านล่างนี้ใน terminal ของ tinnakorn-test-a ตามด้วยพิมพ์yes
ก็จะสามารถเชื่อมต่อเข้าไปยัง tinnakorn-test-b จาก tinnakorn-test-a ได้ครับ (ใช้ Public IPv4 address ของ tinnakorn-test-b ในการเชื่อมต่อ)
ssh -i .ssh/tinnakorn-test-b.pem [Public IPv4 address ของ tinnakorn-test-b]
สรุป
การสาธิตนี้ก็แสดงให้เห็นว่าเราสามารถเชื่อมต่อ EC2 อื่นจาก EC2 หลักได้โดยใช้วิธีการย้ายไฟล์ key pair (.pem) ไปยังโฟลเดอร์ .ssh ของ Server EC2 หลัก จากนั้นก็รันคำสั่งที่ทำให้เราเข้าถึงและสามารถเชื่อมต่อเข้าไปยัง EC2 อื่นจาก EC2 หลักได้
ในกรณีที่ต้องการใช้ PuTTY ก็จะต้องเป็นไฟล์ key pair ประเภท (.ppk) นะครับ ส่วนวิธีทำเหมือนกับบทความนี้เลย เพียงแค่เรารู้วิธีการย้ายไฟล์เข้าไปยังโฟลเดอร์ .ssh ของ Server EC2 หลัก แล้วรันคำสั่งตามบทความนี้ก็จะทำให้เราสามารถเชื่อมต่อไปยัง EC2 อื่นจาก EC2 หลักได้อย่างง่ายดาย
นอกจากนี้วิธีการเชื่อมต่อไปยัง EC2 อื่นก็จะมี 2 วิธีคือ [การเชื่อมต่อด้วย Private IPv4 address และ การเชื่อมต่อด้วย Public IPv4 address] ทีนี้ก็ขึ้นอยู่กับผู้ใช้งาน ถ้าสะดวกวิธีไหนก็ใช้วิธีนั้นได้เลยครับ